package src.itheima06;


import src.itheima04.Student;

import java.util.*;

/*
     java.util.Collections 操作集合的工具类
        特点:
            1.构造方法私有
            2.全部是静态方法
        常用方法:
            public static <T> void sort(List<T> list，Comparator<T> comp):将集合中元素按照指定规则排序。
                参数:
                    1.List<T> list: 接口,传递实现类对象 ArrayList和LinkedList
                    2.Comparator<T> comp: 接口,用来指定比较规则的
                        抽象方法:
                            public abstract int compare(T t1,T t2): T是引用类型,不能直接相减,必须获取到属性
                                第一个参数-第二个参数: 升序
                                第二个参数-第一个参数: 降序序

                            对Student对象age属性按照从小到大的顺序排列
                                public int compare(Student s1,Student s2) {
                                    return s1.getAge() - s2.getAge();
                                }


        ArrayList集合存储Student对象,并按照年龄升序排列

 */
public class Demo07Collections {
    public static void main(String[] args) {
        //2.创建List集合对象,泛型Student
        List<Student> list = new ArrayList<>();

        //3.List集合对象调用add方法,添加多个Student对象
        list.add(new Student("zs",18));
        list.add(new Student("ls",16));
        list.add(new Student("ww",26));
        list.add(new Student("zl",23));
        System.out.println("排序前: "+list);
        /*
            调用sort方法,按照年龄age属性排序
            sort方法,需要一个Comparator接口类型的参数,必须传递实现类对象
            定义Comparator接口的实现类,指定排序规则: 年龄升序

         */
        Collections.sort(list,new MyComparator());

        System.out.println("年龄升序排序后: "+list);

        /*
            调用sort方法,按照年龄age属性排序
            sort方法,需要一个Comparator接口类型的参数,可以传递匿名内部类对象
            指定排序规则: 年龄降序
         */
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //指定排序规则: 年龄降序
                //第二个参数的年龄 - 第一个参数的年龄
                return o2.getAge() - o1.getAge();
            }
        });

        System.out.println("年龄降序排序后: "+list);

    }
}
